PostgreSQL pg_profile 报告解读与优化

1 背景知识

本文将介绍 pg_profile 报告 报表的条目。pg_profile 报告还提供了一个搜索功能,用于搜索感兴趣的相关内容。
接下来就会根据[[report_omega_Last24h_334_388.html]]进行。

2 报告详细信息

一级字段 二级字段 说明
version PostgreSQL pg_profile的版本。
Server name 服务器连接的名称。
Interval(sample) start 快照开始的id
end 快照结束的id
Interval (time) start 快照开始的时间。
end 快照结束的时间。
Settings 数据库版本。

3 服务器统计信息

3.1 Database statistics

此部分报告统计每个数据库的统计信息,是基于 pg_stat_database 视图收集而成的。

一级字段 二级字段 说明
database 数据库名称。
Transactions Commits 已提交的事务的数量。
Rollbacks 已回滚的事务的数量。
Deadlocks 死锁发生的数量。
Block statistics Hit(%) 缓冲区数据块的命中率。
Read 物理读的数据块的数量。
Hit 逻辑读的数据块的数量。
Block I/O times Read 会话服务器进程读取数据文件块所花费的时间(以秒为单位)。
Write 会话服务器进程写入数据文件块所花费的时间(以秒为单位)。
Tuples Ret 返回的元组数量。
Fet 获取的元组数量。
Ins 插入的元组数量。
Upd 更新的元组数量。
Del 删除的元组数量。
Temp files Size 该数据库查询时造成的写入临时文件的数据总量(temp_bytes).
Files 该数据库中查询语句创建的临时文件数量(temp_files)
Size 快照结束的时间时的数据库大小(pg_database_size())
Growth 快照区间间隔时间内,数据库的数据量增长大小。

3.2 Cluster I/O statistics

此部分报告统计 I/O 操作相关的统计信息。按照对象类型、会话类型、上下文进行展示。是基于 pg_stat_io 视图收集而成的。

一级字段 二级字段 说明
Object 发起I/O操作的数据库对象。
Backend 发起I/O操作的服务器会话进程的类型。
Context I/O操作的上下文。
Reads Count 发生读取操作的数量。
Bytes 发生读取操作的数据量。
Time 发生读取操作所花费的时间。
Writes Count 发生写入操作的数量。
Bytes 发生写入操作的数据量。
Time 发生写入操作所花费的时间。
Writebacks Count 要求内核写入永久存储的数据块数量。
Bytes 要求内核写入永久存储的数据块大小。
Time 内核写入永久存储的数据块所花费的时间。
Extends Count 发生对象扩展的操作数量。
Bytes 发生对象扩展的数据量。
Time 对象扩展的操作所花费的时间。
Hits 在共享缓冲区中找到目标表所尝试的次数。
Evictions 从共享缓冲区或本地缓冲区中移除一个数据块的次数。
Reuses 在批量读取、批量写入、和清理死亡元组的操作时,共享缓冲区之外的环形缓冲区将会被重复使用的次数。
Fsyncs Count fsync 调用次数。
Time fsync 操作所花费的时间。

3.3 Cluster SLRU statistics

PostgreSQL SLRU 缓存的访问统计信息,基于 pg_stat_slru 视图收集而成的。

字段 说明
Name PostgreSQL SLRU 名称。
Zeroed 初始化置零的缓冲区块的数量。
Hits PostgreSQL SLRU 命中数据块的数量。
Reads 读取PostgreSQL SLRU数据块数量。
%Hit PostgreSQL SLRU 命中数据块的百分比。
Writes 写入 PostgreSQL SLRU数据块数量。
Checked 检查 PostgreSQL SLRU数据块是否存在的数量。
Flushes PostgreSQL SLRU脏数据块刷新数量。
Truncates PostgreSQL SLRU移除数据块的数量。

3.4 Session statistics by database

此部分报告统计会话的状态。

一级字段 二级字段 说明
Database 数据库名称。
Timings (s) Total 会话在数据库中所花费的总和时间。
Active 会话在数据库中执行SQL语句所花费的时间。
Idle 会话在数据库中IDLE 时间,包括idle_in_trasaction_time
Sessions Established 连接此数据库的会话总数。
Abondoned 由于客户端连接丢失而终止的数据库会话数量。
Fatal 由于数据库致命错误导致会话丢失的数量。
Killed DBA 手动杀死的会话数量。

3.5 Statement statistics by database

此部分报告统计 pg_stat_statements 会话信息的统计信息。

一级字段 二级字段 说明
Database 数据库名称。
Calls SQL 语句的执行总数。
Time (s) Plan 生成执行计划的时间(total_plan_time 总和)。
Exec 执行时间(total_time 或 total_exec_time 总和) 。
Read 读取数据块所花费的时间。
Write 写入数据块所花费的时间。
Trg 执行触发器功能的所花费的时间。
Temp I/O Time Read 读取临时文件数据块所花费的时间。
Write 写入临时文件数据块所花费的时间。
Fetched (blk) Shared 读取共享缓冲区中的数据块数量总和(shared_blks_read + shared_blks_hit)。
Local 读取本地缓冲区中的数据块数量总和(local_blks_read + local_blks_hit)。
Dirtied (blk) Shared 共享缓冲区中被移除的数据块数量(shared_blks_dirtied)。
Local 本地缓冲区中被移除的数据块数量(local_blks_dirtied)。
Temp (blk) Read 读取操作所使用的临时文件数据块数量(temp_blks_read) 。
Write 写入操作所使用的临时文件数据块数量(temp_blks_written)。
Local (blk) Read 读取临时文件数据块数量(local_blks_read)。
Write 写入临时文件数据块数量(local_blks_written)。
Statements 语句执行总数。
WAL size 产生的WAL 总量。

3.6 JIT statistics by database

基于 pg_stat_statements 扩展提供的 JIT 相关的统计数据。

一级字段 二级字段 说明
Database 数据库名称。
Calls 语句执行次数总数。
Time (s) Plan 生成执行计划所花费的时间(total_plan_time)
Exec 执行语句所花费的时间( total_time 或者 total_exec_time)。
Generation Count 执行JIT编译生成的代码语句的总计数。
Gen. time 生成JIT 代码所花费的时间总和。
Inlining Count 生成JIT代码函数需要内联的次数。
Time 生成JIT 内联函数所花费的总时间。
Optimization Count 优化语句的次数。
Time 优化语句所花费的总时间。
Emission Count 提交JIT 代码的次数。
Time 生产JIT代码的总时间(秒)。

3.7 Cluster statistics

此部分报告统计 pg_stat_bgwriter 视图信息。

一级字段 说明
Scheduled checkpoints 发生检查点的总数量,取自checkpoints_timed 字段。
Requested checkpoints 请求发生检查点的总数,取自checkpoints_req 字段。
Checkpoint write time (s) 检查点发生后写入数据总时间,取自checkpoint_write_time` 字段。
Checkpoint sync time (s) 检查点同步数据总时间(以秒为单位),取自checkpint_sync_time 字段。
Checkpoints buffers written 检查点发生后共享缓冲区写入数据块的总数,取自buffers_checkpint 字段。
Background buffers written bg_writer 进程写入数据块的总数,取自buffers_clean 字段。
Backend buffers written 由会话服务器进程写入数据块的总数,取自buffers_backend 字段。
Backend fsync count 调用fsync 的总次数,取自buffers_backend_fync 字段。
Bgwriter interrupts (too many buffers) 由于bg_writer进程达到bgwriter_lru_maxpages 参数值,而被中断写入的次数。
Number of buffers allocated 缓冲区使用的数据块数量,取自(buffers_alloc 字段)。
WAL generated WAL 日志生成总量。
Start LSN 此报告开始的LSN 序号。
End LSN 此报告结束的LSN 序号。
WAL segments archived 归档PostgreSQL WAL日志 的数量,取自pg_stat_archiver视图的archived_count 字段。
WAL segments archive failed 归档 PostgreSQL WAL日志失败的数量,取自pg_stat_archiver视图failed_count 字段。

3.8 WAL statistics

一级字段 说明
WAL generated 快照区间内 WAL 日志产生的数据量。
WAL per second 平均每秒WAL 日志产生的数据量。
WAL records 快照区间内WAL 日志记录数。
WAL FPI WAL 日志全页数量。
WAL buffers full 因WAL buffer 写满导致 WAL 数据写入磁盘的次数(wal_buffers_full)。
WAL writes 因(wal_write) 请求导致WAL buffer 写入磁盘次数。
WAL writes per second 每秒因(wal_write) 请求导致WAL buffer 写入磁盘次数。
WAL sync 因(issue_xlog_fsync) 请求导致WAL buffer 写入磁盘次数。
WAL syncs per second 每秒因(issue_xlog_fsync) 请求导致WAL buffer 写入磁盘次数。
WAL write time (s) 因(XLogWrite) 请求导致WAL buffer 写入所花费的磁盘时间。
WAL write duty WAL 日志写入磁盘的时间与报告区间时间的占比百分比。
WAL sync time (s) 因(issue_xlog_fsync ) 请求导致WAL buffer 同步磁盘所花费的时间
WAL sync duty WAL 日志同步磁盘的时间与报告区间时间的占比百分比。

3.9 Tablespace statistics

此部分报告统计每个表空间增长的信息。

一级字段 说明
Tablespace 表空间名称。
Path 表空间路径。
Size 表空间大小。
Growth 在报告区间内表空间增长的大小。

3.10 Wait sampling

此部分报告统计 pg_wait_sampling 扩展获取的数据。

3.10.1 Wait events types

此部分报告统计每种等待事件类型统计信息。这一部分的统计信息是通过 pg_wait_sampling 扩展获取的数据。

一级字段 说明
Wait exent type 当前语句触发的等待事件类型,取自pg_stat_activity
Statements Waited (s) SQL语句执行导致的等待事件的等待的时间。
%Total SQL语句执行导致的等待事件的等待时间,占总等待时间的百分比。
All Waited (s) 在当前等待事件类型的情况下,所有进程(包括后端进程)的等待时间。
%Total 在当前等待事件类型时,占总等待时间的百分比。

3.10.2 Top wait events (statements)

此部分报告统计SQL语句执行所导致的等待事件和等待时间信息。

一级字段 说明
Wait exent type 等待事件类型。
Wait exent 等待事件的名称。
Waited (s) SQL语句执行导致的等待时间。
%Total SQL语句指定导致的等待时间在总等待时间的百分比。

3.10.3 Top wait events (All)

此部分报告统计所有进程(包括会话服务器进程和后端进程)的等待事件。

一级字段 说明
Wait exent type 等待事件的类型。
Wait exent 等待事件的名称。
Waited (s) 所有后端进程在等待事件中的等待时间(以秒为单位)。

4 子快照统计信息

开启子快照功能之后,便会收集会话状态的详细信息。

4.1 Session state statistics by database

一级字段 二级字段 说明
Database 数据库名称。
Summary Active 会话的acitive 状态的总时间。
Idle in xact 空闲事务会话状态的总时间。
Idle in xact (A) 空闲事务会话(abort)状态的总时间。
Maximal Active acitive 状态的最长时间。
Idle in xact 空闲事务会话状态的最长时间。
Idle in xact (A) 空闲事务会话(abort)状态的最长时间。
xact age 最老的事务ID .

4.2 Top 'idle in transaction' session states by duration

此部分报告统计 pg_stat_activity 视图中空闲事务的会话信息。

一级字段 说明
Database 数据库名称。
User 用户名称
App 应用名称。
Addr ip 地址。
Pid 进程ID.
Xact start 事务
State change 会话状态更改时间。
State duration 会话状态的持续时间。

4.3 Top 'active' session states by duration

此部分报告统计 pg_stat_activity 视图中活动(active)事务的会话信息。

一级字段 说明
Database 数据库名称。
User 用户名称
App 应用名称。
Addr ip 地址。
Pid 进程ID.
Xact start 事务开始时间。
State change 会话状态更改时间。
State duration 会话状态的持续时间。

4.4 Top states by transaction age

此部分报告统计 pg_stat_activity 视图中事务年龄的会话信息。

一级字段 说明
Database 数据库名称。
User 用户名称
App 应用名称
Xact start 事务开始时间。
age 事务的年龄(age(backend_xmin)。
State 事务年龄最大的会话状态。
State change 会话状态变更的时间戳。
State duration 会话状态的持续时间。

4.5 Top states by transaction duration

此部分报告统计 pg_stat_activity 视图中事务状态的持续时间进行排序,和其会话信息。

一级字段 说明
Database 数据库名称。
User 用户名称
App 应用名称
Xact start 事务开始时间。
age 事务的年龄(age(backend_xmin)。
State 事务年龄最大的会话状态。
State change 会话状态变更的时间戳。
State duration 会话状态的持续时间。

5 SQL query statistics

此部分报告包含在报告区间内几个重要的统计排序的顶级SQL 语句。是从 pg_stat_statements 视图 中获取数据。双击统计信息即可显示查询SQL文本。

6 参考链接

官方文档